package com.dc.bobaoge.project.v2.to.v3.business.core.method.message;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.dc.bobaoge.base.entity.message.core.po.Message;
import com.dc.bobaoge.base.mapper.message.MessageMapper;
import com.dc.bobaoge.common.em.MessageTemplateEnum;
import com.dc.bobaoge.project.base.core.old.entity.OldCoreMessage;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.function.Consumer;

/**
 * MessageTemplate1ResolveMethod
 *
 * @author chenxueli
 * @date 2024-01-15 11:43:00
 */
@Component
public class MessageTemplate1ResolveMethod extends AbstractResolveMessageMethod<
        Message,
        MessageMapper
        > {

    @Resource
    private MessageMapper messageMapper;

    /**
     * 新增的方法信息
     *
     * @param oldCoreMessage 旧消息信息
     * @param supplier       额外操作
     * @return 最终的数据
     */
    @Override
    protected Message add(OldCoreMessage oldCoreMessage, Consumer<Message> supplier) {
        var message = resolvePo(new Message(), oldCoreMessage);
        supplier.accept(message);
        // 处理其他信息
        messageMapper.insert(message);
        return message;
    }

    /**
     * 更新的方法信息
     *
     * @param message        新消息信息
     * @param oldCoreMessage 旧消息信息
     * @param supplier       额外操作
     * @return 最终的数据
     */
    @Override
    protected Message update(Message message, OldCoreMessage oldCoreMessage, Consumer<Message> supplier) {
        supplier.accept(message);
        // 处理其他信息
        var wrapper = new LambdaUpdateWrapper<Message>()
                .eq(Message::getId, message.getId())
                .eq(Message::getSharding, message.getSharding());
        message.setSharding(null);
        messageMapper.update(message, wrapper);
        return message;
    }

    /**
     * 获取消息的模板信息
     *
     * @return 消息的模板信息
     */
    @Override
    public MessageTemplateEnum getMessageTemplate() {
        return MessageTemplateEnum.MESSAGE;
    }

}
